package jwdt.xadmin.flow.action;

import jwdt.xadmin.system.bean.TUser;

import com.ezerg.util.StringUtil;
import com.ezerg.web.Form;
import com.ezerg.web.Module;
import com.ezerg.web.Page;
import com.ezerg.web.annotation.Controller;
import com.ezerg.web.annotation.RequestMapping;

/**
 * 请假流程Controller
 * 流程特点:多级审批流程、decision节点的表达式写法->${day > 2 ? 'transition5' : 'transition4'}
 * 业务数据:
 *     所有节点的业务数据均以json格式保存在order、task表的variable字段中
 *     建议业务数据以独立的表保存，通过orderId来关联
 */
@Controller("/xadmin/flow/leave")
public class LeaveAction extends SnakerAction {
	/**
	 * 请假申请路由方法
	 */
	@RequestMapping("/apply")
	public Page doApply(Form f, Module m) {
		TUser user = (TUser) f.getSession("userInfo");
		//设置操作人为当前登录用户，请假流程演示时，将申请人、部门经理审批人、总经理审批人都设置为当前用户
		//可通过修改申请页面的部门经理、总经理输入框来改变下一步的处理人
		f.add("operator", user.getUsername());
		String orderId = f.getString(PARA_ORDERID);
		String taskId = f.getString(PARA_TASKID);
		//根据taskId是否为空来标识当前请求的页面是否为活动任务的节点页面
		if(StringUtil.nullOrBlank(orderId) || !StringUtil.nullOrBlank(taskId)) {
			//如果实例id为空或者驳回情况下，返回apply.jsp
			return m.jspPage(url.concat("leave/apply.jsp"));
		} else {
			//如果orderId非空、taskId为空，则表示申请步骤已提交，此时可获取申请数据
			//由于请假流程中的业务数据，是保存在任务表的variable字段中，所以通过flowData方法获取
			//如果业务数据保存在业务表中，需要业务表的orderId字段来关联流程，进而根据orderId查询出业务数据
			flowData(f, m, orderId, f.getString(PARA_TASKNAME));
			//返回申请的查看页面
			return m.jspPage(url.concat("leave/applyView.jsp"));
		}
	}
	
	/**
	 * 部门经理审批路由方法
	 */
	@RequestMapping("/approveDept")
	public Page doApproveDept(Form f, Module m) {
		String orderId = f.getString(PARA_ORDERID);
		String taskId = f.getString(PARA_TASKID);
		if(!StringUtil.nullOrBlank(taskId)) {
			return m.jspPage(url.concat("leave/approveDept.jsp"));
		} else {
			flowData(f, m, orderId, f.getString(PARA_TASKNAME));
			return m.jspPage(url.concat("leave/approveDeptView.jsp"));
		}
	}
	
	/**
	 * 总经理审批路由方法
	 */
	@RequestMapping("/approveBoss")
	public Page doApproveBoss(Form f, Module m) {
		String orderId = f.getString(PARA_ORDERID);
		String taskId = f.getString(PARA_TASKID);
		if(!StringUtil.nullOrBlank(taskId)) {
			return m.jspPage(url.concat("leave/approveBoss.jsp"));
		} else {
			flowData(f, m, orderId, f.getString(PARA_TASKNAME));
			return m.jspPage(url.concat("leave/approveBossView.jsp"));
		}
	}
}
